package com.wnxy.sddfp.system.listener;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.wnxy.sddfp.common.contants.MQConstant;
import com.wnxy.sddfp.common.model.dto.bank.BankCardRequestDto;
import com.wnxy.sddfp.system.entity.UserCard;
import com.wnxy.sddfp.system.entity.UserDetail;
import com.wnxy.sddfp.system.service.IUserCardService;
import com.wnxy.sddfp.system.service.IUserDetailService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.concurrent.CompletableFuture;

/**
 * @author yellow Docter
 * @date 2024 -04-16
 * @desc
 *
     * @Component          组件 创建对象添加到ioc容器中
     * @Configuration      java的类的配置
     * @Bean               java的配置、用于方法上面
     * @Controller        用于控制层、创建对象添加到ioc容器中
     */
//@Component
//public class BindCardListener {
//
//    @Autowired
//    private IUserDetailService userDetailService;
//
//    @Autowired
//    private IUserCardService userCardService;
//
//    @RabbitListener(
//            queues = MQConstant.SDDFP_QUEUE_BIND
//    )
//    public void bandCardListener(@Payload BankCardRequestDto bankCardRequestDto){
//
//        //获取流水号
//        String reqCode = bankCardRequestDto.getReqCode();
//
//        /**
//         *   CompletableFuture.runAsync方法创建了两个异步任务
//         *   runAsync方法接受一个Runnable作为参数，并返回一个CompletableFuture<Void>。这个Runnable中的代码将在另一个线程中异步执行。
//         */
//        // 创建第一个任务的CompletableFuture
//        CompletableFuture<Void> futureTask1 = CompletableFuture.runAsync(() -> {
//            // 在这里执行Task 1的具体任务
//            //01 更新 user_detail 中的 状态
//            userDetailService.update(
//                    Wrappers.lambdaUpdate(UserDetail.class)
//                            .set(UserDetail::getCardBindStatus,1)
//                            .eq(UserDetail::getReqCode,reqCode)
//            );
//        });
//
//        // 创建第二个任务的CompletableFuture
//        CompletableFuture<Void> futureTask2 = CompletableFuture.runAsync(() -> {
//            // 在这里执行Task 2的具体任务
//            //02 更新 user_card  中的 银行、
//            userCardService.update(
//                    Wrappers.lambdaUpdate(UserCard.class)
//                            .set(UserCard::getBankNo,bankCardRequestDto.getBankNo())
//                            .set(UserCard::getBankTitle,bankCardRequestDto.getBankTitle())
//                            .eq(UserCard::getUserId,bankCardRequestDto.getUserCode())
//            );
//        });
//
//        // 等待两个任务都完成
//        //CompletableFuture.allOf方法接受多个CompletableFuture对象作为参数，并返回一个新的CompletableFuture，
//        // 这个新的CompletableFuture在所有给定的CompletableFuture对象都完成时才会完成。我们调用join方法来等待所有任务完成。
//        CompletableFuture.allOf(futureTask1, futureTask2).join();
//        System.out.println("完成数据同步....");
//    }
//
//}
